﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Persistencia;
using Persistencia.Contexto;
using GestorDeFlotasModelo.Entities;

namespace GestorDeFlotasDesktop.UILogic
{
    /// <summary>
    /// Clase para unificar todos los atributos comunes a los WinForms.
    /// </summary>
    public class BaseForm : Form
    {
        public delegate void SelectedItemEventHandler(object sender, Cliente e);

        protected TransaccionSesion Transaccion = null;
        protected bool mantieneTransaccion = false;
        public virtual bool MantieneTransaccion { get { return mantieneTransaccion; } set {mantieneTransaccion = value;} }

        /// <summary>
        /// Cuando se crea el formulario, creamos la transaccion para que pueda realizar 
        /// operaciones sobre la base de datos.
        /// </summary>
        protected override void OnCreateControl()
        {
             base.OnCreateControl();
            
             Transaccion = Aplicacion.Sesion.Transaccion(this.GetType().ToString());
        }


        /// <summary>
        /// Cuando se oculta y no es necesario que mantenga la transacción, la cerramos
        /// porque ya no la necesita más
        /// </summary>
        /// <param name="e"></param>
        protected override void OnVisibleChanged(EventArgs e)
        {
            base.OnVisibleChanged(e);
            if (!this.Visible && !MantieneTransaccion)
            {
                Transaccion.Cerrar();
            }
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // BaseForm
            // 
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Name = "BaseForm";
            this.Load += new System.EventHandler(this.BaseForm_Load);
            this.ResumeLayout(false);

        }

        private void BaseForm_Load(object sender, EventArgs e)
        {

        }

        #region Grid Configuration
        protected void GridCreation(DataGridView dg)
        {
            dg.Columns.Clear();
            dg.AutoGenerateColumns = true;
            dg.ReadOnly = true;
            dg.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dg.MultiSelect = false;
        }
        
        #endregion

        /// <summary>
        /// Enum con los distitos tipos de form que utilizamos.
        /// </summary>
        public enum FormMode
        { Add, Update, List, SelectItem }
    }
}
